<?php

namespace app\com\simtoon\utils;

use Yii;

/**
 * 缓存辅助类
 */
class CacheUtils{
	
	
	/**
	 * 获取apc的缓存
	 * @return string 缓存数据
	 */
	public static function getAreaFromApc($pre,$key){

			if(self::exitsCache($pre.$key)){
			return self::getFromCache($pre.$key);
		}else{  //启用双读机制
			$model = new ModelUtils();
			if($pre == "area_"){
				$areaname = $model->getAreaName($key);
				//把区域名称写到缓存中
				self::addToCache($pre.$key, $areaname );
				return $areaname;
			}
			if($pre == "parea_"){
				$childArr = $model->getChildArea($key);
				//$areajson = json_encode($childArr);
				//把区域名称写到缓存中
				self::addToCache($pre.$key, $childArr);
				return $childArr;
			}

                //查询城区经纬度
                if($pre=="areas_"){
                    $areas=$model->getAreas($key);
                    self::addToCache($pre,$key,$areas);
                    return $areas;

                }


		}
	}




    /**
     * 查询缓存中的domain_name
     * @param $pre
     * @param $key
     * @return array
     */
    public static function getDomainNameFromApc($pre,$key){

        if(self::exitsCache($pre.$key)){
            return self::getFromCache($pre.$key);
        }else{  //启用双读机制
            $model = new ModelUtils();
            if($pre == "domain_"){
                $domainArr = $model->getDomainName($key);
                self::addToCache($pre.$key, $domainArr);
                return $domainArr;
            }
        }
    }
    /**
     * 获取字典表的apc缓存
     * @param $type 字段名称
     * @param $value 字段值
     * @return string 字段对应label的缓存数据
     */
    public static function getDictApc($type,$value){
        if(self::exitsCache($type."_".$value)){
            return self::getFromCache($type."_".$value);
        }else{  //启用双读机制
            $model = new ModelUtils();
            $dict_val = $model->getDict($type,$value);
            if(!isset($dict_val) || empty($dict_val)){
                return $value;
            }
            //把区域名称写到缓存中
            self::addToCache($type."_".$value, $dict_val);
            return $dict_val;
        }
    }
	
	/**
	 * 从缓存中获取数据
	 * @param array $_keys 键的集合
	 * @return array 缓存数据集合
	 */
	public static function getFromCache($_key)
	{
		return Yii::$app->cache->get($_key);
	}
	/**
	 * 从缓存中获取多项数据
	 * @param array $_keys 键的集合
	 * @return array 缓存数据集合
	 */
	public static function getArrayFromCache(array $_keys)
	{
		return Yii::$app->cache->mget($_keys);
	}
	
	/**
	 * 加入缓存
	 * @param mixed $_key
	 * @param mixed $_value
	 * @param integer $_duration
	 * @param Dependency $_dependency
	 * @return boolean 是否添加成功
	 */
	public static function addToCache($_key, $_value, $_duration = 0, $_dependency = null)
	{
		return Yii::$app->cache->add($_key, $_value, $_duration, $_dependency);
	}
	public static function setToCache($_key, $_value, $_duration = 0, $_dependency = null)
	{
		return Yii::$app->cache->set($_key, $_value, $_duration, $_dependency);
	}
	
	
	/**
	 * 将数据数组加入到缓存
	 * @param array $_items 数据键值对：array("key1"=>"value1","key2"=>"value2")
	 * @param integer $_duration
	 * @param Dependency $_dependency
	 * @return boolean 是否添加成功
	 */
	public static function addArrayToCache($_items, $_duration = 0, $_dependency = null)
	{
		return Yii::$app->cache->madd($_items, $_duration, $_dependency);
	}
	public static function setArrayToCache($_items, $_duration = 0, $_dependency = null)
	{
		return Yii::$app->cache->mset($_items, $_duration, $_dependency);
	}
	
	/**
	 * 判断缓存中是否存在
	 * @param mixed $_key 键
	 * @return boolean 是否存在
	 */
	public static function exitsCache($_key)
	{
		return Yii::$app->cache->exists($_key);
	}
	
	/**
	 * 从缓存中删除数据
	 * @param mixed $_key 键
	 * @return boolean 是否删除成功
	 */
	public static function deleteCache($_key)
	{
		return Yii::$app->cache->delete($_key);
	}
	
	/**
	 * 清除缓存中的所有数据，不建议使用
	 * @return boolean 是否清除成功
	 */
	public static function clearCache()
	{
		return Yii::$app->cache->flush();
	}
	
	
//	public function getRegionFromApc($key)
//	{
//		$value = Yii::$app->cache->get(REGION.$key);
//		if(!$value)
//		{
//			$value = $this->getDataFromDB($key);
//			Yii::$app->cache->set(REGION.$key, $value);
//		}
//		return $value;
//	}
	
	
}


?>